﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GuiClient.DAO;
using GuiClient.DTO;

namespace GuiClient
{
    public partial class FormManHinhChinh : Form
    {

        private TaiKhoanDTO TaiKhoanKhachHang;
        public FormManHinhChinh()
        {
            InitializeComponent();
            MyInit();
        }


        private void MyInit()
        {
            ShowCuaSoUsercontrol(1);
        }
        private void FormManHinhChinh_Load(object sender, EventArgs e)
        {          
        }


        public void ShowCuaSoUsercontrol(int IdCuaSo)
        {            
            this.userControlFormDangNhap.Visible = (IdCuaSo == 1);
            this.userControlManHinhChonChucNang.Visible = (IdCuaSo == 2);
            this.userControlManHinhRutTien.Visible = (IdCuaSo == 3);      
            this.userControlManHinhChuyenKhoan.Visible=(IdCuaSo==4);
            this.userControlManHinhNhapMucTienMuonRut.Visible = (IdCuaSo == 5);

            switch (IdCuaSo)
            {
                case 1:
                    {
                        this.userControlFormDangNhap.ResetGui();
                        break;
                    }                
                case 4:
                    {
                        this.userControlManHinhChuyenKhoan.ResetGui();
                        break;
                    }
                case 5:
                    {
                        this.userControlManHinhNhapMucTienMuonRut.ResetGui();
                        break;
                    }
            }
        }


        public DangNhapDTO LayThongTinDangNhap()
        {
            DangNhapDTO DangNhapDTO = new DangNhapDTO();
            DangNhapDTO.MaThe = this.userControlFormDangNhap.getMaThe();
            DangNhapDTO.MaPin = this.userControlFormDangNhap.getMaPin();
            return DangNhapDTO;
            
        }

        private void userControlFormDangNhap_DangNhapEvent(DTO.DangNhapDTO info)
        {
            TaiKhoanDAO tk = new TaiKhoanDAO();
            DangNhapDTO thongTinDangNhap = LayThongTinDangNhap();
            TaiKhoanKhachHang = tk.DangNhap(thongTinDangNhap);

            if (TaiKhoanKhachHang != null)
            {
                this.userControlManHinhChonChucNang.UpdateGiaoDienThongTinTaiKhoan(TaiKhoanKhachHang);
                ShowCuaSoUsercontrol(2);
            }
            else {
                MessageBox.Show("Mã thẻ hoặc mã pin không chính xác !");
            }
        }

        private void userControlManHinhChonChucNang_ChuyenKhoanEvent()
        {
            ShowCuaSoUsercontrol(4);
        }

        private void userControlManHinhChonChucNang_RutTienEvent()
        {
            ShowCuaSoUsercontrol(3);
        }


        private void userControlManHinhChonChucNang_ThoatEvent()
        {
            ShowCuaSoUsercontrol(1);
        }

        private void userControlFormDangNhap_Load(object sender, EventArgs e)
        {

        }

        private void userControlManHinhRutTien_ThoatEvent()
        {
            ShowCuaSoUsercontrol(2);
        }

        private void userControlManHinhRutTien_XacNhanGiaoDichEvent(double money)
        {
            if (money == -1)
            {
                ShowCuaSoUsercontrol(5);
            }
            else
            {
                XuLyGiaoDichRutTien(money);          
            }
        }

        private void XuLyGiaoDichRutTien(double money)
        {
            TaiKhoanDAO TaiKhoanDAO = new DAO.TaiKhoanDAO();
            Double curMoney = TaiKhoanDAO.LaySoDuTaiKhoan(TaiKhoanKhachHang.MaThe);
            if (curMoney - money < 50000)
            {
                ShowCuaSoUsercontrol(2);
                MessageBox.Show("Số dư tài khoản không đủ để thực hiện giao dịch");
            }
            else
            {
                curMoney = curMoney - money;
                TaiKhoanDAO.CapNhatSoDuTaiKhoan(TaiKhoanKhachHang.MaThe, curMoney);
                TaiKhoanKhachHang.SoDu = TaiKhoanDAO.LaySoDuTaiKhoan(TaiKhoanKhachHang.MaThe);
                ShowCuaSoUsercontrol(2);
                this.userControlManHinhChonChucNang.UpdateGiaoDienThongTinTaiKhoan(TaiKhoanKhachHang);

                GiaoDichRutTienDTO GiaoDichRutTienDTO = new DTO.GiaoDichRutTienDTO();
                GiaoDichRutTienDTO.MaThe = TaiKhoanKhachHang.MaThe;
                GiaoDichRutTienDTO.SoTien = money;
                GiaoDichRutTienDTO.ThoiGianGiaoDich = DateTime.Now;
                GiaoDichRutTienDAO GiaoDichRutTienDAO = new DAO.GiaoDichRutTienDAO();
                GiaoDichRutTienDAO.ThemGiaoDichRutTien(GiaoDichRutTienDTO);

                MessageBox.Show("Giao dịch thành công !");
            }
        }

        private void userControlManHinhChuyenKhoan_ThoatEvent()
        {
            ShowCuaSoUsercontrol(2);
        }

        private void userControlManHinhNhapMucTienMuonRut_ThoatEvent()
        {
            ShowCuaSoUsercontrol(2);
        }

        private void userControlManHinhNhapMucTienMuonRut_XacNhanGiaoDichEvent(double money)
        {
            XuLyGiaoDichRutTien(money);
        }

        private void userControlManHinhChuyenKhoan_XacNhanGiaoDichEvent(string MaTheNguoiNhan, double money)
        {

        }

        private void userControlManHinhChuyenKhoan_XacNhanGiaoDichEvent_1(string MaTheNguoiNhan, double money)
        {
            TaiKhoanDAO TaiKhoanDAO = new DAO.TaiKhoanDAO();
            TaiKhoanDTO taiKhoanNguoiNhan = TaiKhoanDAO.LayThongTinTaiKhoanNhan(MaTheNguoiNhan);
            if (taiKhoanNguoiNhan != null)
            {
                Double soDuTkNguoiGui = TaiKhoanDAO.LaySoDuTaiKhoan(TaiKhoanKhachHang.MaThe);
                Double soDuTkNguoiNhan = TaiKhoanDAO.LaySoDuTaiKhoan(taiKhoanNguoiNhan.MaThe);
                if (soDuTkNguoiGui - money - 3000 < 50000)
                {
                    MessageBox.Show("Số dư tài khoảng không đủ để thực hiện giao dịch này !");
                }
                else
                {
                    if (MessageBox.Show("Bạn có muốn thực hiện giao dịch chuyển khoản này không ?\nNgười nhận:" + taiKhoanNguoiNhan.HoTen + "\nSố tiền:" + money.ToString(), "Xác nhận giao dịch", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        //Update tai khoan nguoi nhan
                        soDuTkNguoiNhan = soDuTkNguoiNhan + money;
                        TaiKhoanDAO.CapNhatSoDuTaiKhoan(taiKhoanNguoiNhan.MaThe, soDuTkNguoiNhan);
                        //Update tai khoan nguoi gui
                        soDuTkNguoiGui = soDuTkNguoiGui - money - 3000;
                        TaiKhoanDAO.CapNhatSoDuTaiKhoan(TaiKhoanKhachHang.MaThe, soDuTkNguoiGui);
                        //Update giao dien nguoi gui
                        TaiKhoanKhachHang.SoDu = soDuTkNguoiGui;
                        this.userControlManHinhChonChucNang.UpdateGiaoDienThongTinTaiKhoan(TaiKhoanKhachHang);

                        GiaoDichChuyenKhoanDTO GiaoDichChuyenKhoanDTO = new DTO.GiaoDichChuyenKhoanDTO();
                        GiaoDichChuyenKhoanDTO.MaTheGui = TaiKhoanKhachHang.MaThe;
                        GiaoDichChuyenKhoanDTO.MaTheNhan = taiKhoanNguoiNhan.MaThe;
                        GiaoDichChuyenKhoanDTO.SoTien = money;
                        GiaoDichChuyenKhoanDTO.ThoiGianGiaoDich = DateTime.Now;
                        GiaoDichChuyenKhoanDAO GiaoDichChuyenKhoanDAO = new DAO.GiaoDichChuyenKhoanDAO();
                        GiaoDichChuyenKhoanDAO.ThemGiaoDichChuyenKhoan(GiaoDichChuyenKhoanDTO);


                        MessageBox.Show("Giao dịch thành công !");
                        ShowCuaSoUsercontrol(2);
                    }
                    else
                    {
                        ShowCuaSoUsercontrol(2);
                    }
                }
            }
            else
            {
                MessageBox.Show("Tài khoản người nhận không tồn tại !");
                ShowCuaSoUsercontrol(2);
            }
            
        }
    }
}
